      SUBROUTINE regularizaL2(X,iflagF,iflagG,beta)	

      !termo de regularizacao: equação 2.51 do zhdanov

      use globais
      implicit none


      integer :: i,j,ndonoh
      integer::iflagF,iflagG
      double precision ::X(N)

      double precision ::beta



      if(iflagF.eq.1)then !calcula  Treg


	  if(iflagG.eq.1)then !calcula  grad Treg
	      do i=1,Nx0*Nz0
		  gradTreg(i) = 0.0d0
	      enddo
	  endif
	  Treg = 0.0d0


! 	  do j=1,Nz0   !norma do vetor
! 	      do i=1,Nx0
! 		  Ndonoh = (j-1)*Nx0 + i
! 
! 		  Treg = Treg + (X(Ndonoh))**2
! 
! 		  if(iflagG.eq.1)then !calcula  grad Treg
! 		      gradTreg(Ndonoh) = gradTreg(Ndonoh) + 2.0*(X(Ndonoh))
! 		  endif
! 	      enddo
! 	  enddo


! 	  do j=2,Nz0-1 !diferenca com os 2 vizinhos
! 	      do i=2,Nx0-1
! 		  Ndonoh = (j-1)*Nx0 + i
! 
! 		  Treg = Treg + (X(Ndonoh)-X(Ndonoh+1))**2 + (X(Ndonoh)-X(Ndonoh+Nx0))**2
! 
! 		  if(iflagG.eq.1)then !calcula  grad Treg
! 		      gradTreg(Ndonoh) = gradTreg(Ndonoh) + 2.0*(X(Ndonoh)-X(Ndonoh+1)) + 2.0*(X(Ndonoh)-X(Ndonoh+Nx0))
! 		      gradTreg(Ndonoh+1) = gradTreg(Ndonoh+1) - 2.0*(X(Ndonoh)-X(Ndonoh+1))
! 		      gradTreg(Ndonoh+Nx0) = gradTreg(Ndonoh+Nx0) - 2.0*(X(Ndonoh)-X(Ndonoh+Nx0))
! 		  endif
! 	      enddo
! 	  enddo


	  do j=2,Nz0-1 !diferenca com os 4 vizinhos
	      do i=2,Nx0-1
		  Ndonoh = (j-1)*Nx0 + i

		  Treg = Treg + (X(Ndonoh)-X(Ndonoh+1))**2 + (X(Ndonoh)-X(Ndonoh+Nx0))**2 + &
			      &	(X(Ndonoh)-X(Ndonoh-1))**2 + (X(Ndonoh)-X(Ndonoh-Nx0))**2   

		  if(iflagG.eq.1)then !calcula  grad Treg
		      gradTreg(Ndonoh) = gradTreg(Ndonoh) + 2.0*(X(Ndonoh)-X(Ndonoh+1)) + 2.0*(X(Ndonoh)-X(Ndonoh+Nx0)) + &
							 &	2.0*(X(Ndonoh)-X(Ndonoh-1)) + 2.0*(X(Ndonoh)-X(Ndonoh-Nx0))
		      gradTreg(Ndonoh+1) = gradTreg(Ndonoh+1) - 2.0*(X(Ndonoh)-X(Ndonoh+1))
		      gradTreg(Ndonoh-1) = gradTreg(Ndonoh-1) - 2.0*(X(Ndonoh)-X(Ndonoh-1))
		      gradTreg(Ndonoh+Nx0) = gradTreg(Ndonoh+Nx0) - 2.0*(X(Ndonoh)-X(Ndonoh+Nx0))
		      gradTreg(Ndonoh-Nx0) = gradTreg(Ndonoh-Nx0) - 2.0*(X(Ndonoh)-X(Ndonoh-Nx0))
		  endif
	      enddo
	  enddo


	  Treg = Treg + beta**2

      endif

	

 


      return
      end subroutine regularizaL2